﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;

namespace KioskosJugandoLimpio.Admin
{
    public partial class Encuestas : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (jsonString.Value != null)
            {
                if (jsonString.Value != "")
                {
                    string xml = jsonString.Value.Replace("{","<");
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(xml);
                    Classes.Encuesta encuesta = new Classes.Encuesta();
                    encuesta.Introduccion = doc.DocumentElement.Attributes["introduccion"].Value;
                    encuesta.NotaFinal = doc.DocumentElement.Attributes["notaFinal"].Value;
                    encuesta.Titulo = doc.DocumentElement.Attributes["titulo"].Value;
                    int idEncuesta;
                    if (int.TryParse(doc.DocumentElement.Attributes["idEncuestas"].Value, out idEncuesta))
                    {
                        encuesta.idEncuestas = idEncuesta;
                    }
                    else {
                        encuesta.idEncuestas = -1;
                    }
                    foreach (XmlNode seccionX in doc.GetElementsByTagName("secciones"))
                    {
                        if (seccionX.Attributes.Count > 0)
                        {
                            Classes.Seccion seccion = fnGetSeccion(seccionX);
                            seccion.Encuesta = encuesta;
                            encuesta.Secciones.Add(seccion);
                        }
                    }
                    try
                    {
                        encuesta.guardar();
                    }
                    catch (System.Data.SqlClient.SqlException sqlex) {
                        Label lblError = new Label();
                        lblError.Text = sqlex.ToString();
                        divEdit.Controls.Add(lblError);

                    }
                    catch (Exception ex)
                    {
                        Label lblError = new Label();
                        lblError.Text = ex.ToString();
                        divEdit.Controls.Add(lblError);
                    }
                    jsonString.Value = "";
                    btnNueva.Visible = true;
                }
            }

        }

        private static Classes.Seccion fnGetSeccion(XmlNode seccionX)
        {
            Classes.Seccion seccion = new Classes.Seccion();
            seccion.titulo = seccionX.Attributes["titulo"].Value;
            seccion.NotaFinal = seccionX.Attributes["notaFinal"].Value;
            int idSeccion;
            if (int.TryParse(seccionX.Attributes["id"].Value, out idSeccion))
            {
                seccion.idSecciones = idSeccion;
            }
            else
            {
                seccion.idSecciones = -1;
            }
            foreach (XmlNode preguntaX in ((XmlElement)seccionX).GetElementsByTagName("questions"))
            {
                if (preguntaX.Attributes.Count > 0)
                {
                    Classes.Pregunta pregunta = fnGetPregunta(seccion, preguntaX);
                    seccion.Preguntas.Add(pregunta);
                }
            }
            return seccion;
        }

        private static Classes.Pregunta fnGetPregunta(Classes.Seccion seccion, XmlNode preguntaX)
        {
            int idPregunta;
            if (int.TryParse(preguntaX.Attributes["id"].Value, out idPregunta))
            {
                idPregunta = idPregunta + 0;
            }
            else
            {
                idPregunta = -1;
            }
            string strPregunta = preguntaX.Attributes["pregunta"].Value;
            int numero = 0;
            int tipoPregunta = int.Parse(preguntaX.Attributes["tipoPregunta"].Value); ///TODO: add tipoPregunta
            Classes.Pregunta pregunta = new Classes.Pregunta(idPregunta, strPregunta, numero, "", tipoPregunta, seccion);
            foreach (XmlNode opcionX in ((XmlElement)preguntaX).GetElementsByTagName("options"))
            {
                if (opcionX.Attributes.Count > 0)
                {
                    Classes.Opcion opcion = fnGetOpcion(pregunta, opcionX);
                    pregunta.Opciones.Add(opcion);
                }
            }
            return pregunta;
        }

        private static Classes.Opcion fnGetOpcion(Classes.Pregunta pregunta, XmlNode opcionX)
        {
            int idOpcion;
            if (int.TryParse(opcionX.Attributes["id"].Value, out idOpcion))
            {
                idOpcion = idOpcion + 0;
            }
            else
            {
                idOpcion = -1;
            }

            Classes.Opcion opcion = new Classes.Opcion(idOpcion, opcionX.Attributes["opcion"].Value, opcionX.Attributes["valor"].Value, pregunta);
            return opcion;
        }
        
        protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "editarContenido") {
               // divEdit.InnerHtml = e.CommandArgument.ToString();
                Classes.Encuesta en = new Classes.Encuesta(int.Parse(e.CommandArgument.ToString()));
                en.mode = Classes.Modes.Edit;
                divEdit.Controls.Add(en.form);
                btnNueva.Visible = false;   
            }
        }

        protected void btnNueva_Click(object sender, EventArgs e)
        {
            Classes.Encuesta en = new Classes.Encuesta();
            en.mode = Classes.Modes.Edit;
            en.idEncuestas = -1;
            divEdit.Controls.Add(en.form);
            btnNueva.Visible = false;
        }
    }
}